package utils

import "sync/atomic"

type AtomicInt struct {
	nonce uint64
}

func NewAtomicInt(nonce uint64) *AtomicInt {
	return &AtomicInt{
		nonce: nonce,
	}
}

// Increment 加一 操作
func (a *AtomicInt) Increment() uint64 {
	return atomic.AddUint64(&a.nonce, 1)
}

func (a *AtomicInt) SetNonce(nonce uint64) {
	atomic.StoreUint64(&a.nonce, nonce)
}

// Decrement 减一 操作
func (a *AtomicInt) Decrement() uint64 {
	return atomic.AddUint64(&a.nonce, ^uint64(0))
}

func (a *AtomicInt) Load() uint64 {
	return a.nonce
}
